package com.maoyue.demo.controller;


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.util.ListUtils;
import com.maoyue.demo.dao.UserDAO;
import com.maoyue.demo.entity.User;
import com.maoyue.demo.listener.DemoDataListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * 毛越的控制器
 *
 * @author MaoYue
 * @date 2022/11/05
 */
@RestController
@RequestMapping("maoyue")
@Slf4j
public class MaoYueController {

    @Autowired
    UserDAO userDAO;


    static String path2 = "D:\\demo2\\excel-test\\";

    /**
     * 读文件
     */
    @PostMapping ("read")
    public String simpleRead(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), User.class, new DemoDataListener(userDAO)).sheet().doRead();
        return "success";


    }


    /**
     * 写文件
     */

    @GetMapping("write")
    public String simpleWrite() {
        // 注意 simpleWrite在数据量不大的情况下可以使用（5000以内，具体也要看实际情况），数据量大参照 重复多次写入
        //创建一个目录对象
        File dir = new File(path2);

        //判断当前对象是否存在
        if (!dir.exists()) {
            //不存在的话那么就创建一个对象
            dir.mkdirs();
        }
        String fileName = path2 + System.currentTimeMillis() + ".xlsx";

        log.info(fileName);
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, User.class)
                .sheet("模板")
                .doWrite(() -> {
                    // 分页查询数据
                    return data();
                });
        return "创建文件成功";
    }


    private List<User> data() {
        List<User> list = ListUtils.newArrayList();
        for (int i = 0; i < 10; i++) {
            User data = new User();
            data.setPassword("123" + i);
            data.setUserId(i);
            data.setUserName("jack" + i);
            list.add(data);
        }
        return list;
    }


}
